// DOM工具函数 - 为所有模块提供统一的DOM操作
// 这个文件可以快速解决硬编码问题，而不需要大规模重构

/**
 * 安全的getElementById - 带错误处理和兜底
 */
function safeGetElementById(elementId, moduleName = '') {
    try {
        const element = document.getElementById(elementId);
        if (!element) {
            console.warn(`⚠️ ${moduleName}: 未找到元素 #${elementId}`);
        }
        return element;
    } catch (error) {
        console.error(`❌ ${moduleName}: 获取元素 #${elementId} 时出错:`, error);
        return null;
    }
}

/**
 * 安全的querySelector - 带错误处理和兜底
 */
function safeQuerySelector(selector, moduleName = '') {
    try {
        const element = document.querySelector(selector);
        if (!element) {
            console.warn(`⚠️ ${moduleName}: 未找到元素 ${selector}`);
        }
        return element;
    } catch (error) {
        console.error(`❌ ${moduleName}: 查询元素 ${selector} 时出错:`, error);
        return null;
    }
}

/**
 * 安全的querySelectorAll - 带错误处理
 */
function safeQuerySelectorAll(selector, moduleName = '') {
    try {
        const elements = document.querySelectorAll(selector);
        if (elements.length === 0) {
            console.warn(`⚠️ ${moduleName}: 未找到元素 ${selector}`);
        }
        return elements;
    } catch (error) {
        console.error(`❌ ${moduleName}: 查询元素 ${selector} 时出错:`, error);
        return [];
    }
}

/**
 * 显示/隐藏元素的安全方法
 */
function safeToggleDisplay(elementId, show = true, moduleName = '') {
    const element = safeGetElementById(elementId, moduleName);
    if (element) {
        element.style.display = show ? 'block' : 'none';
        return true;
    }
    return false;
}

/**
 * 添加/移除CSS类的安全方法
 */
function safeToggleClass(elementId, className, add = true, moduleName = '') {
    const element = safeGetElementById(elementId, moduleName);
    if (element) {
        if (add) {
            element.classList.add(className);
        } else {
            element.classList.remove(className);
        }
        return true;
    }
    return false;
}

/**
 * 设置元素内容的安全方法
 */
function safeSetContent(elementId, content, isHTML = false, moduleName = '') {
    const element = safeGetElementById(elementId, moduleName);
    if (element) {
        if (isHTML) {
            element.innerHTML = content;
        } else {
            element.textContent = content;
        }
        return true;
    }
    return false;
}

/**
 * 批量事件绑定的安全方法
 */
function safeBindEvents(selector, eventType, handler, moduleName = '') {
    const elements = safeQuerySelectorAll(selector, moduleName);
    elements.forEach((element, index) => {
        try {
            element.addEventListener(eventType, handler);
        } catch (error) {
            console.error(`❌ ${moduleName}: 绑定事件到第${index}个元素时出错:`, error);
        }
    });
    return elements.length;
}

// 全局暴露这些工具函数
window.DOMUtils = {
    safeGetElementById,
    safeQuerySelector,
    safeQuerySelectorAll,
    safeToggleDisplay,
    safeToggleClass,
    safeSetContent,
    safeBindEvents
};

console.log('✅ DOM工具函数已加载');
